package cn.edu.gzhmt.order.service.impl;

import java.sql.SQLException;
import java.util.List;

import cn.edu.gzhmt.order.dao.IOrderDao;
import cn.edu.gzhmt.order.dao.impl.OrderDaoImpl;
import cn.edu.gzhmt.order.domain.Order;
import cn.edu.gzhmt.order.service.IOrderService;
import cn.edu.gzhmt.utils.jdbc.JdbcUtils;

/**
 * 订单模块 service层实现类
 * @author azhuo
 *
 */
public class OrderServiceImpl implements IOrderService {

	private IOrderDao orderDao = new OrderDaoImpl();

	/**
	 * 生成订单
	 * 生成订单的时候，生成订单和订单条目，是一个事务
	 */
	public void generateOrder(Order order) {

		try {
			JdbcUtils.beginTransaction(); // 开启事务

			orderDao.addOrder(order); // 添加订单

			orderDao.addOrderItems(order.getOrderItemList()); // 添加订单明细（条目）

			JdbcUtils.commitTransaction(); // 提交事务

		} catch (SQLException e) {
			try {
				JdbcUtils.rollbackTransaction(); // 回滚事务
			} catch (SQLException e1) {
				throw new RuntimeException(e1);
			}
			throw new RuntimeException(e);
		}

	}

	/**
	 * 根据订单id 加载订单
	 */
	public Order loadOrder(String oid) {
		
		return orderDao.findByOid(oid);
	}

	/**
	 * 查询用户的所有订单
	 */
	public List<Order> findAllOrder(String uid) {
		
		return orderDao.findByUid(uid);
	}

	/**
	 * 进行订单支付
	 */
	public void zhifu(String oid) {
		int ostate = 2;
		orderDao.updateOstate(oid, ostate);
	}

	/**
	 * 确认收货
	 */
	public void confirm(String oid) {
		int ostate = 4;
		orderDao.updateOstate(oid, ostate);
	}

	/**
	 * 删除订单
	 * 假删除
	 */
	public void removeOrder(String oid) {
		orderDao.removeByOid(oid);
	}

}
